package com.xl.juc;

/**
 * 卖票的例子 synchronized 非公平锁 可插队
 * @author Charley
 * @create 2020-12-27
 */
public class SaleTicket {
    public static void main(String[] args) {
        //并发多个线程操作同一个资源类
        Ticket ticket = new Ticket();

       /* 废弃 使用Lambda表达式
       new Thread(new Runnable() {
            @Override
            public void run() {
                //业务逻辑
            }
        },"线程名称").start();*/

       new Thread(()->{
           for (int i=0;i<60;i++){
               ticket.sale();
           }
       },"A").start();
       new Thread(()->{
           for (int i=0;i<60;i++){
               ticket.sale();
           }
       },"B").start();
       new Thread(()->{
           for (int i=0;i<60;i++){
               ticket.sale();
           }
       },"C").start();


    }
}
//资源类  OOP 面向对象编程 解耦
class Ticket{
 //属性
 private int nummber=50;
//卖票的方式  若没有加synchronized 数据是混乱的
//synchronized 本质 排队 锁  1.锁对象 2 锁class
 public synchronized void sale(){
    /* synchronized(Ticket.class){}*/
     if (nummber>0){
         System.out.println(Thread.currentThread().getName()+"卖出了"+(nummber--)+"票，剩余"+nummber+"张票");
     }
 }
}
